export default {
	onLoad() {
		if (this.$storage.get('token')) {
			(async () => {
				const {
					data
				} = await this.$postPublic(['permission', 'hasPermission']); 
				this.s_has = data || [];
			})()
		}
		/**
		 * 重新打开之前的页面
		 * @param {string} token 访问令牌
		 * @param {Array} exemptedRoutes 免除认证的页面路由列表
		 * @param {Function} callBack token失效可写退出登录等操作
		 */
		this.$record.reopenPreviousPages(this.$storage.get('token'));
	},
	data() {
		return {
			UNI_PLATFORM: ` ${process.env.UNI_PLATFORM} `,
			clearsetSelect: null,
			s_has: [],
			// 添加公共的属性 
		};
	},
	methods: {
		has(val) { // 权限判断 
			return this.s_has?.includes(val)
		},
		hasc(name) { // 权限判断 创建 
			return this.s_has?.includes(`/bill/${name}/create`)
		},
		hasu(name) { // 权限判断 修改
			return this.s_has?.includes(`/bill/${name}/update`)
		},
		hasr(name) { // 权限判断删除
			return this.s_has?.includes(`/bill/${name}/remove`)
		},
		hasl(name) { // 权限判断 查看
			return this.s_has?.includes(`/bill/${name}/list`)
		},
		/**
		 * 退出登录
		 * @param {string} url 重定向路径 
		 */
		logout(url) {
			if (!url) return '你给个跳转路径啊！'
			// 清除用户的登录状态
			// 清除用户的身份验证凭据
			// 清除用户的会话数据
			this.$storage.remove('token');
			// 重定向用户到退出登录页面或其他页面 
			this.$record.reLaunch({
				url
			});
		},
		/**
		 * 反转颜色
		 * @param {string} color - 颜色值，支持 hex、rgb、rgba 格式
		 * @param {boolean} random - 是否随机反转颜色
		 * @returns {string} - 反转后的颜色值
		 */
		invertColor(color, random) {
			const formattedColor = color.toLowerCase().trim();

			if (random) {
				// 随机反转颜色
				if (formattedColor.startsWith('#')) {
					let invertedHex = '';
					for (let i = 1; i < formattedColor.length; i++) {
						const char = formattedColor[i];
						const randomNum = Math.floor(Math.random() * 16);
						const invertedChar = (parseInt(char, 16) ^ randomNum).toString(16);
						invertedHex += invertedChar;
					}
					return `#${invertedHex}`;
				} else {
					throw new Error('Random inversion is only supported for hex colors');
				}
			} else {
				// 固定反转颜色
				if (formattedColor.startsWith('#')) {
					let invertedHex = '';
					for (let i = 1; i < formattedColor.length; i++) {
						const char = formattedColor[i];
						const invertedChar = (15 - parseInt(char, 16)).toString(16);
						invertedHex += invertedChar;
					}
					return `#${invertedHex}`;
				} else if (formattedColor.startsWith('rgb')) {
					const rgbValues = formattedColor.match(/\d+/g).map(Number);
					const invertedRgbValues = rgbValues.map((value) => 255 - value);

					if (formattedColor.startsWith('rgba')) {
						const alpha = rgbValues[3] || 1;
						return `rgba(${invertedRgbValues.join(', ')}, ${alpha})`;
					} else {
						return `rgb(${invertedRgbValues.join(', ')})`;
					}
				} else {
					throw new Error('Unsupported color format');
				}
			}
		},
		/** 
		@method getSelect 获取元素的信息
		@param {string | Array} id - 元素的id，可以是字符串或数组。数组时，第一个元素必须是id，第二个元素可选，表示查询方式，默认为'select'。
		@param {Function} callback - 回调函数，接收查询到的元素的位置信息作为参数。 */
		getSelect(id, callback, time = 500) {
			if (this.clearsetSelect !== null) {
				clearTimeout(this.clearsetSelect);
			}
			return new Promise((resolve) => {
				this.clearsetSelect = setTimeout(() => {
					if (!Array.isArray(id)) {
						id = [id]; // 将非数组类型的数据转换为包含一个元素的数组
					}
					const [elementId, select = 'select'] = id;
					const querys = uni.createSelectorQuery().in(this);
					// 创建选择器对象，并将作用域限定为当前组件
					// 查询具有指定类名的元素
					const target = querys[select](elementId);
					// 监听元素的信息
					target.boundingClientRect((...args) => {
						callback && callback(...args);
						resolve(...args);
					}).exec();
				}, time);
			});
		},
	},
	onUnload() {
		// 删除路由记录
		this.$record.clearCurrentRecord();
	},

};